package com.happymmall.util;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;

import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Druid连接池工具类
 * 负责连接池的初始化和连接获取
 */
public class DruidUtils {
    // 单例连接池实例
    private static DruidDataSource dataSource;

    // 静态初始化块，类加载时初始化连接池
    static {
        try {
            // 加载数据库配置文件（与原有db.properties兼容）
            Properties prop = new Properties();
            InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("db.properties");
            if (is == null) {
                throw new RuntimeException("未找到db.properties配置文件");
            }
            prop.load(is);

            // 初始化Druid连接池
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            // 初始化失败时抛出运行时异常，终止程序启动
            throw new RuntimeException("Druid连接池初始化失败", e);
        }
    }

    /**
     * 获取数据库连接（从连接池）
     *
     * @return DruidPooledConnection 连接池中的连接
     * @throws SQLException 连接获取失败时抛出
     */
    public static DruidPooledConnection getConnection() throws SQLException {
        // 从连接池获取连接，注意：这里返回的是Druid的连接对象
        return dataSource.getConnection();
    }

    /**
     * 获取连接池实例（用于监控或配置调整）
     *
     * @return DruidDataSource 连接池实例
     */
    public static DruidDataSource getDataSource() {
        return dataSource;
    }

    /**
     * 关闭连接池（一般在应用停止时调用）
     */
    public static void closeDataSource() {
        if (dataSource != null) {
            dataSource.close();
        }
    }
}
